package study.仪器解析.串口化通信.生化仪;

/**
 * @Author 刘伟涛
 * @Date 2024/8/21 16:28
 **/
public class 十六进制转SCALL码 {

        // 将十六进制字符串转换为ASCII字符串
        public static String hexToAscii(String hexStr) {
            StringBuilder output = new StringBuilder("");

            // 去除所有的连字符
            hexStr = hexStr.replaceAll("[-:]", "").trim();
            for (int i = 0; i < hexStr.length(); i += 2) {
                // 获取两个字符作为一个字节
                String str = hexStr.substring(i, i + 2);
                // 将十六进制字节转换为整数，然后转换为对应的ASCII字符
                int intValue = Integer.parseInt(str, 16);

                switch (intValue) {
                    case 0x02:
                        output.append("[STX]"); // 显示 "Start of Text"
                        break;
                    case 0x03:
                        output.append("[ETX]"); // 显示 "End of Text"
                        break;
                    case 0x0D:
                        output.append("[CR]");  // 显示 "Carriage Return"
                        break;
                    case 0x0A:
                        output.append("[LF]");  // 显示 "Line Feed"
                        break;
                    case 0x04:
                        output.append("[ETO]");  // 显示 "Line Feed"
                        break;
                    default:
                        if (intValue >= 32 && intValue <= 126) {
                            // 如果是可见字符，则直接转换
                            char ch = (char) intValue;
                            output.append(ch);
                        } else {
                            // 处理其他不可见字符
                            output.append(String.format("[0x%02X]", intValue));
                        }
                        break;
                }
            }

            return output.toString();
        }

        public static void main(String[] args) {
            // 输入的十六进制字符串
            String hexStr = "02-31-48-7C-5C-5E-26-7C-7C-7C-31-7C-7C-7C-7C-7C"+
                    "-32-7C-7C-31-7C-32-30-32-34-30-38-31-39-31-34-30-31-34-31-0D-03-39-32-0D-0A-02-32-50-7C-31-7C-7C-7C-7C-7C-7C-7C-4D-7C-7C-7C-7C-7C-7C-5E-59-0D-03-38-46-0D-02-33-4F-7C-31-7C-4B-4E-32-34-31-32-34-31-37-5E-36-5E-31-5E-36-7C-7C-7C-52-7C-32-30-32-34-30-38-31-39-31-33-34-33-33-34-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-4B-4E-32-34-31-32-34-31-37-5E-36-5E-31-5E-36-7C-7C-7C-52-7C-32-30-32-34-30-38-31-39-31-33-34-33-33-34-7C-7C-7C-7C-7C-7C-7C-7C-7C-31-7C-7C-7C-7C-7C-7C-7C-7C-7C-7C-4F-0D-03-33-32-0D-0A-02-34-52-7C-31-7C-5E-5E-41-4C-54-7C-32-31-2E-34-34-7C-55-2F-4C-7C-30-5E-35-30-5C-5E-7C-4E-7C-7C-46-7C-7C-7C-7C-32-30-32-34-30-38-31-39-31-33-34-33-33-34-0D-03-36-38-0D-0A-02-35-4C-7C-31-7C-4E-0D-03-30-38-0D-0A-04";

            // 转换并输出结果
            String asciiStr = hexToAscii(hexStr);
            System.out.println("转换后的ASCII字符串: " + asciiStr);
        }

}
